﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace BDSim
{
    public class EphemerisDLL
    {
        //////////////////////////////////////////////////////////
        //函数名称：NavBGREEph_AddError
        //函数功能：添加轨道误差的星历拟合：【将一组2小时，时间间隔为60秒的轨道首先进行拉格朗日插值成2小时100秒的轨道;
        //         将插值后的轨道值添加误差0.5;
        //         将添加后的误差轨道进行星历拟合。】
        //输入：
        //      (1)AddErrFlag:是否添加轨道误差开关，0：不添加；1：添加。
        //      (2)SysStartTime:系统仿真起始时间（以系统仿真开始时间为起点，添加轨道误差）（lhz2016.5.16）
        //      (3)SatType: SatType: 0:IGSO,1：MEO,2:GEO卫星;
        //      (4)FitTime: 拟合时刻（UTC时，“年月日时分秒”形式)
        //      (5)OrbitMsg:拟合使用的轨道信息
        //                   SimStep:仿真步长(单位：s)
        //                   PVcount:轨道值组数
        //                   PVobs[]:结构体形式的卫星位置X,Y,Z（惯性系）及卫星历元（“年月日时分秒”形式）（至少输2个小时）
        //      (6)AddErrParam:添加星历正弦误差幅值参数
        //输出：
        //      （1）SixEph：星历16参
        //返回值 :
        //       (1) 4:在给卫星RTN方向添加误差时，ECI与RTN互转过程中，输入的卫星位置或状态错误(如三方向位置全为0或三方向速度全为0)
        //       (2) 2  轨道添加误差中程序异常!
        //       (3)1  运行正确 
        //       (4)0  拟合时间输入超界（导致GetGAST计算错误）
        //       (6)-2: 其它异常（该主程序整个过程中某个部分出错）
        //       (7)-3:星历最小二乘拟合时，拟合残差过大或者计算最小二乘计算逆矩阵时报错
        //       (9)-4:程序中的NavEph或NavEph_GEO函数计算过程中其它异常
        //       (10)-5:输入UTCTime结构的时间数据出错
        //////////////////////////////////////////////////////////
        [DllImport("EphemerisDLL.dll", EntryPoint = "NavBGREEph_AddError", CallingConvention = CallingConvention.Cdecl)]
        public static extern int NavBGREEph_AddError(NavEphFit_Input InputParam, double SimStep, int PVcount, NodePosVel[] PVobs, NavEphFit_ControlParam ControlParam, out NavEphFit_Output output); 

        /////////////////////////////////////////////星历解算/////////////////////////////////////////////////////////////////
        //函数名称：CalNav16ToPos
        //函数功能：利用卫星轨道根数计算出所需时刻的卫星位置
        //输入：
        //      (1)Eph_Param:星历16参结构体
        //      (2)SatFlag: 2:GEO卫星;其它：非GEO卫星
        //      (3)GM: 地球引力位常数 
        //      (4)DOTOMEGAE
        //      (5)t:待计算的卫星时刻的周内秒
        //      (6)bIner:  1:输出惯性系卫星位置速度;其它：输出地固系卫星位置速度
        //输出：
        //      (1)PosVel:该时刻的卫星位置速度
        //返回值 :
        //       无
        ////////////////////////////////////////////////////////// 
       [DllImport("NavCalPVDLL.dll", EntryPoint = "CalNav16ToPV", CallingConvention = CallingConvention.Cdecl)]
       public static extern void CalNav16ToPV(Ephemeris_16 Eph_Param, int SatFlag, double t,out NodePosVel PosVel, int bIner, double GM = 398600441800000, double DOTOMEGAE = 7.2921150e-005);

  
    }
}                                                                                                                                                                                    

